/*
 * SPDX-FileCopyrightText: 2024 Andrew Gunnerson
 * SPDX-License-Identifier: GPL-3.0-only
 */

package com.sanji.audio_test.extension

import android.webkit.MimeTypeMap

/**
 * 兼容性 MIME 类型映射表
 *
 * 用于解决 Android 9 和 10 版本中 MimeTypeMap 支持的 MIME 类型较少的问题。
 * 这些版本尚未切换到 mime-support，而是使用了功能较少的 MimeUtils。
 *
 * 参考:
 * [1] https://android.googlesource.com/platform/external/mime-support/+/refs/heads/main/mime.types
 * [2] https://android.googlesource.com/platform/libcore/+/refs/tags/android-9.0.0_r61/luni/src/main/java/libcore/net/MimeUtils.java
 */
private val MIME_TYPES_COMPAT = hashMapOf(
    // Android 9 and 10 didn't switch to mime-support [1] yet. Instead, their MimeTypeMap used
    // MimeUtils, which supported significantly fewer MIME types.
    // [1] https://android.googlesource.com/platform/external/mime-support/+/refs/heads/main/mime.types
    // [2] https://android.googlesource.com/platform/libcore/+/refs/tags/android-9.0.0_r61/luni/src/main/java/libcore/net/MimeUtils.java
    "audio/mp4" to "m4a",
)

/**
 * 检查 MimeTypeMap 是否包含指定的文件扩展名（兼容性版本）
 *
 * 此扩展函数首先检查标准的 MimeTypeMap 是否包含该扩展名，
 * 如果不包含，则进一步检查兼容性映射表中是否包含该扩展名。
 *
 * @param extension 要检查的文件扩展名
 * @return 如果 MimeTypeMap 或兼容性映射表中包含该扩展名则返回 true，否则返回 false
 */
fun MimeTypeMap.hasExtensionCompat(extension: String): Boolean =
    hasExtension(extension) || extension in MIME_TYPES_COMPAT.values

/**
 * 从 MIME 类型获取文件扩展名（兼容性版本）
 *
 * 此扩展函数首先尝试使用标准的 MimeTypeMap 获取扩展名，
 * 如果获取失败，则从兼容性映射表中查找对应的扩展名。
 *
 * @param mimeType MIME 类型字符串
 * @return 对应的文件扩展名，如果找不到则返回 null
 */
fun MimeTypeMap.getExtensionFromMimeTypeCompat(mimeType: String): String? =
    getExtensionFromMimeType(mimeType) ?: MIME_TYPES_COMPAT[mimeType]